'use strict'


const path = require('path')

function resolve(dir) {
	return path.join(__dirname, dir)
}
const name = 'Questionnaire' // page title
// If your port is set to 80,
// use administrator privileges to execute the command line.
// For example, Mac: sudo npm run
// You can change the port by the following methods:
// port = 9528 npm run dev OR npm run dev --port = 9528
const port = process.env.port || process.env.npm_config_port || 8090 // dev port

const CopyWebpackPlugin = require('copy-webpack-plugin');

// All configuration item explanations can be find in https://cli.vuejs.org/config/
module.exports = {
	/**
	 * You will need to set publicPath if you plan to deploy your site under a sub path,
	 * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/,
	 * then publicPath should be set to "/bar/".
	 * In most cases please use '/' !!!
	 * Detail: https://cli.vuejs.org/config/#publicpath
	 */
	publicPath: './',
	outputDir: process.env.VUE_APP_NAME,
	assetsDir: 'static',
	lintOnSave: process.env.NODE_ENV === 'development',
	productionSourceMap: false,
	devServer: {
		port: port,
		open: true,
		overlay: {
			warnings: false,
			errors: true
		},
		proxy: {
			'/api': {
				// target: 'http://117.73.254.217:2221/resources/',
				target: 'http://117.73.254.217:2221',
				// target: 'http://dikuang.nameme.cn/',
				// target: 'http://dikuang.ytzpgl.cn/',
				changeOrigin: true,
				pathRewrite: {
					['^' + process.env.VUE_APP_BASE_API]: ''
					// '^/api': ''
				}
			},
		}
		// after: require('./mock/mock-server.js')
	},
	configureWebpack: {
		// provide the app's title in webpack's name field, so that
		// it can be accessed in index.html to inject the correct title.
		name: name,
		resolve: {
			alias: {
				'@': resolve('src')
			}
		},
		plugins: [new CopyWebpackPlugin({
			patterns: [{
					from: './node_modules/earthsdk/dist/XbsjCesium',
					to: 'static/js/earthsdk/XbsjCesium',
					toType: 'dir'
				},
				{
					from: './node_modules/earthsdk/dist/XbsjEarth',
					to: 'static/js/earthsdk/XbsjEarth',
					toType: 'dir'
				}
			]
		})]
	},
	chainWebpack(config) {

		config.plugins.delete('preload') // TODO: need test
		config.plugins.delete('prefetch') // TODO: need test

		// set svg-sprite-loader
		config.module
			.rule('svg')
			.exclude.add(resolve('src/icons'))
			.end()
		config.module
			.rule('icons')
			.test(/\.svg$/)
			.include.add(resolve('src/icons'))
			.end()
			.use('svg-sprite-loader')
			.loader('svg-sprite-loader')
			.options({
				symbolId: 'icon-[name]'
			})
			.end()

		// set preserveWhitespace
		config.module
			.rule('vue')
			.use('vue-loader')
			.loader('vue-loader')
			.tap(options => {
				options.compilerOptions.preserveWhitespace = true
				return options
			})
			.end()

		config
			// https://webpack.js.org/configuration/devtool/#development
			.when(process.env.NODE_ENV === 'development',
				config => config.devtool('cheap-source-map')
			)

		// config
		// .when(process.env.NODE_ENV !== 'development',
		//   config => {
		//     config
		//       .plugin('ScriptExtHtmlWebpackPlugin')
		//       .after('html')
		//       .use('script-ext-html-webpack-plugin', [{
		//       // `runtime` must same as runtimeChunk name. default is `runtime`
		//         inline: /runtime\..*\.js$/
		//       }])
		//       .end()
		//     config
		//       .optimization.splitChunks({
		//         chunks: 'all',
		//         cacheGroups: {
		//           libs: {
		//             name: 'chunk-libs',
		//             test: /[\\/]node_modules[\\/]/,
		//             priority: 10,
		//             chunks: 'initial' // only package third parties that are initially dependent
		//           },
		//           elementUI: {
		//             name: 'chunk-elementUI', // split elementUI into a single package
		//             priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
		//             test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
		//           },
		//           commons: {
		//             name: 'chunk-commons',
		//             test: resolve('src/components'), // can customize your rules
		//             minChunks: 3, //  minimum common number
		//             priority: 5,
		//             reuseExistingChunk: true
		//           }
		//         }
		//       })
		//     config.optimization.runtimeChunk('single')
		//   }
		// )
	}
}
